[INV-MIGRATION-115] Создать таблицу TBD

Создание таблиц хранения чеков, остатков инвентаря и логов PMA

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: billing-service / fridge-service / bupar-audit-service (Базы billing_db, fridge_db, bupar_db).
  • Целевая СУБД: PostgreSQL v15+.
  • Ссылка на Метод: Конфигурация кэша безопасности IAD
  • Статус: Готово к реализации

  • Инструкция по шагам: Выполнить DDL-миграцию для развертывания физического слоя хранения структурированных данных расходов во всех трех изолированных целевых контурах.
-- 1. Скрипт миграции для billing_db (Контур Финансов и Чеков)
CREATE TABLE IF NOT EXISTS billing_db.user_expenses (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    trace_id VARCHAR(128) NOT NULL,
    user_id VARCHAR(64) NOT NULL,
    total_amount NUMERIC(12, 2) NOT NULL,
    currency VARCHAR(3) DEFAULT 'RUB',
    purchased_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

CREATE TABLE IF NOT EXISTS billing_db.expense_items (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    expense_id UUID REFERENCES billing_db.user_expenses(id) ON DELETE CASCADE,
    product_name TEXT NOT NULL,
    price NUMERIC(12, 2) NOT NULL,
    quantity NUMERIC(10, 3) NOT NULL
);

CREATE INDEX IF NOT EXISTS idx_expenses_user ON billing_db.user_expenses(user_id);

-- 2. Скрипт миграции для fridge_db (Контур Холодильника / СУБД INVENTORY)
-- В соответствии с манифестом, таблицы логов готовки, списания и остатков лежат внутри fridge_db
CREATE TABLE IF NOT EXISTS fridge_db.fridge_inventory (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    home_group_id VARCHAR(64) NOT NULL,
    food_element_id VARCHAR(64) NOT NULL,
    quantity NUMERIC(10, 3) NOT NULL, -- Объем в литрах/граммах
    trace_id VARCHAR(128) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Индекс BTREE под стратегию FIFO-вычетов (created_at ASC) и быструю выборку группы
CREATE INDEX IF NOT EXISTS idx_fridge_fifo 
ON fridge_db.fridge_inventory (home_group_id, created_at ASC);

-- 3. Скрипт миграции для bupar_db (Контур Сквозного Анализа Процессов PMA)
CREATE TABLE IF NOT EXISTS bupar_db.bupar_event_logs (
    id BIGSERIAL PRIMARY KEY,
    case_id VARCHAR(128) NOT NULL, -- Сквозной идентификатор цепочки
    event_type VARCHAR(64) NOT NULL, -- 'PRODUCT_BATCH_PURCHASED', etc.
    timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    trace_id VARCHAR(128) NOT NULL,
    payload JSONB NOT NULL
);

-- Индекс на case_id обязателен в соответствии с требованиями манифеста
CREATE INDEX IF NOT EXISTS idx_bupar_case_id ON bupar_db.bupar_event_logs(case_id);